// IWindow.java
package org.zjx.core;

import com.sun.jna.platform.win32.WinDef.HWND;
import org.zjx.command.ICommand;
import org.zjx.state.StateManager;

import java.awt.*;
import java.util.concurrent.CompletableFuture;

/**
 * 窗口接口 - 改进生命周期管理
 */
public interface IWindow extends Runnable {

    /**
     * 获取窗口句柄
     */
    HWND getHwnd();

    Rectangle getTrueBounds();

    /**
     * 获取窗口边界
     */
    java.awt.Rectangle getBounds();

    /**
     * 获取窗口标识
     */
    String getId();

    /**
     * 提交命令 - 异步执行
     * @param command 要执行的命令
     * @return CompletableFuture包含执行结果
     */
    CompletableFuture<Boolean> submitCommand(ICommand command);

    void executeCommand(ICommand command);

    /**
     * 检查窗口是否有效
     */
    boolean isValid();

    /**
     * 优雅关闭窗口线程
     */
    void shutdown();

    /**
     * 等待窗口线程结束
     * @param timeout 超时时间
     * @param unit 时间单位
     * @return 是否成功结束
     * @throws InterruptedException 如果等待被中断
     */
    boolean awaitTermination(long timeout, java.util.concurrent.TimeUnit unit)
            throws InterruptedException;
}